import os
import json
import base64
import requests
from pathlib import Path

# MCP服务器URL
MCP_SERVER_URL = "http://localhost:8080/run"

def run_code_in_mcp(code, dependencies=None):
    """
    向MCP服务器发送代码并获取执行结果
    
    参数:
        code: 要执行的Python代码
        dependencies: 依赖包列表，如果有的话
        
    返回:
        执行结果字典
    """
    if dependencies is None:
        dependencies = []
        
    # 准备请求数据
    payload = {
        "code": code,
        "dependencies": dependencies
    }
    
    # 发送请求到MCP服务器
    response = requests.post(MCP_SERVER_URL, json=payload)
    
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": f"请求失败: {response.status_code}", "details": response.text}

def save_output_files(result, output_dir="output"):
    """
    保存MCP服务器返回的文件
    
    参数:
        result: MCP服务器的响应结果
        output_dir: 保存文件的目录
    
    返回:
        保存的文件路径列表
    """
    saved_files = []
    files = result.get("files", [])
    
    if files:
        # 创建输出目录
        os.makedirs(output_dir, exist_ok=True)
        
        for file in files:
            file_name = file.get("name")
            content = file.get("content")
            
            if content:
                file_path = os.path.join(output_dir, file_name)
                with open(file_path, "wb") as f:
                    f.write(base64.b64decode(content))
                saved_files.append(file_path)
    
    return saved_files

# 示例用法 - 与Cursor编辑器集成
if __name__ == "__main__":
    # 获取当前打开的文件内容（作为演示）
    # 在实际的Cursor扩展中，这将从编辑器API获取
    current_file_code = """
import matplotlib.pyplot as plt
import numpy as np

# 生成一些数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建图形并保存
plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.title('Cursor生成的正弦波')
plt.savefig('cursor_sine.png')
print('图像已生成')
"""
    
    # 执行代码
    result = run_code_in_mcp(current_file_code, dependencies=["matplotlib", "numpy"])
    
    # 输出结果
    print("\n=== 执行结果 ===")
    if "error" in result:
        print(f"错误: {result['error']}")
        if "details" in result:
            print(f"详情: {result['details']}")
    else:
        print("标准输出:")
        print(result.get("stdout", ""))
        
        if result.get("stderr"):
            print("\n标准错误:")
            print(result.get("stderr"))
        
        # 处理返回的文件
        saved_files = save_output_files(result)
        if saved_files:
            print(f"\n生成的文件已保存: {', '.join(saved_files)}") 